package com.ruitu.router_module.jpush;

import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.NotificationCompat;

import com.beanu.arad.Arad;
import com.beanu.arad.utils.Logg;
import com.google.gson.Gson;
import com.ruitu.router_module.A_Rutils;
import com.ruitu.router_module.CommonUtils;
import com.ruitu.router_module.R;
import com.ruitu.router_module.bean.EventModel;
import com.ruitu.router_module.utils.MediaUtil;

import java.io.Serializable;

import cn.jpush.android.api.JPushInterface;

import static android.content.Context.NOTIFICATION_SERVICE;

/**
 * 自定义接收器
 * 如果不定义这个Receiver，则：1) 默认用户会打开主界面 2) 接收不到自定义消息
 * 3.3.0以后不能在此接收消息!!!
 */
public class MyReceiver extends BroadcastReceiver {
    private Context context;

    @Override
    public void onReceive(Context context, Intent intent) {
        this.context = context;
        try {
            Bundle bundle = intent.getExtras();
//            Logg.d("[MyReceiver] onReceive - " + intent.getAction() + ", extras: " + printBundle(bundle));
            if (null != bundle) {
                String jsonStr = bundle.getString(JPushInterface.EXTRA_EXTRA);
                Logg.d("jsonStr = " + jsonStr);
                JMsg jMsg = new Gson().fromJson(jsonStr, JMsg.class);
                if (null != jMsg) {
                }
            }
//            Logg.d("[MyReceiver] onReceive - " + intent.getAction() + ", extras: " + bundle.getString("productId"));

            if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {
                String regId = bundle.getString(JPushInterface.EXTRA_REGISTRATION_ID);
                Logg.d("[MyReceiver] 接收Registration Id : " + regId);
                //send the Registration Id to your server...

            } else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) {
                Logg.d("[MyReceiver] 接收到推送下来的自定义消息: " + bundle.getString(JPushInterface.EXTRA_MESSAGE));
//                processCustomMessage(context, bundle);

            } else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {
                Logg.d("[MyReceiver] 接收到推送下来的通知");
                int notifactionId = bundle.getInt(JPushInterface.EXTRA_NOTIFICATION_ID);
                Arad.bus.post(new EventModel(19010253));//通知请求未读消息数量

//                musicStart();
//                processCustomMessage(context, bundle);
            } else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {
                Logg.d("[MyReceiver] 用户点击打开了通知");
//                musicStop();

                //打开自定义的Activity
                if (CommonUtils.isLogin()) {
//                A_Rutils.startNewActivity(context, "com.ruitu.mall_98.activity.MsgActivity", null);
                    A_Rutils.startNewActivity(context, "com.ruitu.mall_98.activity.SysMsgListActivity", null);
                }
            } else if (JPushInterface.ACTION_RICHPUSH_CALLBACK.equals(intent.getAction())) {
                Logg.d("[MyReceiver] 用户收到到RICH PUSH CALLBACK: " + bundle.getString(JPushInterface.EXTRA_EXTRA));
                //在这里根据 JPushInterface.EXTRA_EXTRA 的内容处理代码，比如打开新的Activity， 打开一个网页等..

            } else if (JPushInterface.ACTION_CONNECTION_CHANGE.equals(intent.getAction())) {
                boolean connected = intent.getBooleanExtra(JPushInterface.EXTRA_CONNECTION_CHANGE, false);
                Logg.w("[MyReceiver]" + intent.getAction() + " connected state change to " + connected);
            } else {
                Logg.d("[MyReceiver] Unhandled intent - " + intent.getAction());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

//    // 打印所有的 intent extra 数据
//    private static String printBundle(Bundle bundle) {
//        StringBuilder sb = new StringBuilder();
//        for (String key : bundle.keySet()) {
//            if (key.equals(JPushInterface.EXTRA_NOTIFICATION_ID)) {
//                sb.append("\nkey:" + key + ", value:" + bundle.getInt(key));
//            } else if (key.equals(JPushInterface.EXTRA_CONNECTION_CHANGE)) {
//                sb.append("\nkey:" + key + ", value:" + bundle.getBoolean(key));
//            } else if (key.equals(JPushInterface.EXTRA_EXTRA)) {
//                if (TextUtils.isEmpty(bundle.getString(JPushInterface.EXTRA_EXTRA))) {
//                    Logg.i("This message has no Extra data");
//                    continue;
//                }
//                try {
//                    JSONObject json = new JSONObject(bundle.getString(JPushInterface.EXTRA_EXTRA));
//                    Iterator<String> it = json.keys();
//
//                    while (it.hasNext()) {
//                        String myKey = it.next();
//                        sb.append("\nkey:" + key + ", value: [" + myKey + " - " + json.optString(myKey) + "]");
//                    }
//                } catch (JSONException e) {
//                    Logg.e("Get message extra JSON error!");
//                }
//            } else {
//                sb.append("\nkey:" + key + ", value:" + bundle.getString(key));
//            }
//        }
//        return sb.toString();
//    }

//    private void processCustomMessage(Context context, Bundle bundle) throws Exception {
//        //获取推送id
//        int notifactionId = bundle.getInt(JPushInterface.EXTRA_NOTIFICATION_ID);
//        /**
//         *  这个地方特殊说明一下
//         *  因为我们发出推送大部分是分为两种，一种是在极光官网直接发送推送，第二是根据后台定义
//         * 的NOTIFICATION发送通知，所以在这里你要根据不同的方式获取不同的内容
//         **/
//        //如果是使用后台定的NOTIFICATION发送推送，那么使用下面的方式接收消息
//        String alert = bundle.getString(JPushInterface.EXTRA_EXTRA);  //扩展消息
//        String title = bundle.getString(JPushInterface.EXTRA_NOTIFICATION_TITLE);  //推送标题
//        String msg = bundle.getString(JPushInterface.EXTRA_ALERT);   //推送消息
//
//        //如果是直接使用极光官网发送推送，那么使用这个来接收消息内容
//        // String title = bundle.getString(JPushInterface.EXTRA_TITLE);
//        //String msg = bundle.getString(JPushInterface.EXTRA_MESSAGE);
//        //  String extras = bundle.getString(JPushInterface.EXTRA_EXTRA);
//        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
//            NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
//            // 通知渠道的id 这个地方只要一直即可
//            String id = notifactionId + "";
//            // 用户可以看到的通知渠道的名字.
//            CharSequence name = title;
//            // 用户可以看到的通知渠道的描述
//            String description = msg;
//            int importance = NotificationManager.IMPORTANCE_HIGH;
//            NotificationChannel mChannel = new NotificationChannel(id, name, importance);
//            // 配置通知渠道的属性
//            mChannel.setDescription(description);
//            // 设置通知出现时的闪灯（如果 android 设备支持的话）
//            mChannel.enableLights(true);
//            mChannel.setLightColor(Color.RED);
//            // 自定义声音
//            mChannel.setSound(Uri.parse("android.resource://" + context.getPackageName() + "/" + R.raw.dingding), null);
//            // 设置通知出现时的震动（如果 android 设备支持的话）
//            mChannel.enableVibration(true);
//            mChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
//            //最后在notificationmanager中创建该通知渠道
//            mNotificationManager.createNotificationChannel(mChannel);
//
//            Logg.i("使用NotificationChannel...");
//        } else {
//            NotificationCompat.Builder notification = new NotificationCompat.Builder(context);
//            //这一步必须要有而且setSmallIcon也必须要，没有就会设置自定义声音不成功
//            notification.setAutoCancel(true).setSmallIcon(R.drawable.app_push_icon);
//            // 设置通知铃声
//            notification.setSound(Uri.parse("android.resource://" + context.getPackageName() + "/" + R.raw.dingding));
//            //这是点击通知栏做的对应跳转操作，可以根据自己需求定义
//            PendingIntent pendingIntent = null;
//            if (CommonUtils.isLogin()) {
//                pendingIntent = A_Rutils.genPendingIntent(context, "com.ruitu.mall_98.activity.SysMsgListActivity", null);
//            }
//            if (null != pendingIntent) {
//                notification.setContentIntent(pendingIntent);
//            }
//            notification
//                    .setAutoCancel(true)
//                    .setContentText(msg)
//                    .setContentTitle(title.equals("") ? "九八商城" : title)
//                    .setSmallIcon(R.drawable.app_push_icon);
//            //bundle.get(JPushInterface.EXTRA_ALERT);推送内容
//            //最后刷新notification是必须的
//            NotificationManager notificationManager = (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);
//            notificationManager.notify(notifactionId, notification.build()); //在此处放入推送id —notifactionId
//
//            Logg.i("使用早期的Notification...");
//        }
//    }

    private void musicStart() {
        MediaUtil.mediaPlay(R.raw.dingding, Arad.app);// 开始播放铃声
    }

    private void musicStop() {
        MediaUtil.mediaStop();// 停止播放铃声
    }

    public static class JMsg<T> implements Serializable {
        private String type;
        private T message;

        public String getType() {
            return type;
        }

        public void setType(String type) {
            this.type = type;
        }

        public T getMessage() {
            return message;
        }

        public void setMessage(T message) {
            this.message = message;
        }
    }
}
